package com.atguigu.controller;


import com.atguigu.pojo.User;
import com.atguigu.pojo.UserVo;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("params")
public class ParamsController {

    /**
     * 请求参数是JavaBean对象User，对象存储在Map集合中
     */
    @RequestMapping("paramsPojoMap")
    public ModelAndView
    paramsPojoMap(ModelAndView modelAndView, UserVo userVo){
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        Map<String, User> userMap = userVo.getUserMap();
        System.out.println("userMap = " + userMap);
        return modelAndView;
    }


    /**
     * 请求参数是JavaBean对象User，对象存储在List集合中
     */
    @RequestMapping("paramsPojoList")
    public ModelAndView
    paramsPojoList(ModelAndView modelAndView,UserVo userVo){
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        for(User user : userVo.getUserList()){
            System.out.println("user = " + user);
        }
        return modelAndView;
    }

    /**
     * 请求参数是JavaBean对象User的包装类：UserVo
     */
    @RequestMapping("paramsPojoVo")
    public ModelAndView paramsPojoVo(UserVo userVo, ModelAndView modelAndView){
        System.out.println("userVo = " + userVo);
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        return modelAndView;
    }

    /**
     * 请求参数是JavaBean对象User
     * 处理器的方法里面，传递参数
     */
    @RequestMapping("paramsPojo")
    public ModelAndView paramsPojo(User user, ModelAndView modelAndView){
        System.out.println("user = " + user);
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        return modelAndView;
    }
    /**
     * 一键多值的:
     *  复选框 checkBox
     *  SpringMVC使用List集合接收参数
     *  处理复选框，一个键多个值的情况，必须添加注解
     *  @RequestParam("hobby") : hobby属性值，和页面中的checkbox标签的name属性值一致
     */
    @RequestMapping("paramsList")
    public ModelAndView paramsList(ModelAndView modelAndView,@Nullable @RequestParam("hobby") List<String> hobby){
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        System.out.println("hobby = " + hobby);
        if(hobby!=null && hobby.size()>0) {
            for (String h : hobby) {
                System.out.println("hobby = " + h);
            }
        }
        return modelAndView;
    }

    /**
     * 一键一值方式
     * 请求参数是一个键，对应一个值
     * 在处理器方法中，直接传递参数就可以
     * 参数的名字，是请求参数的键名即可
     *
     * SpringMVC提供了一个注解： 处理请求参数的键，和方法的参数的变量名不同
     * @RequestParam: 注解可以处理这个问题
     * 注解添加在方法的参数上
     * 注解的属性 value : 配置的是客户端浏览器的请求参数的键
     *
     */
    @RequestMapping("paramsName")
    public ModelAndView paramsName(ModelAndView modelAndView,String username, String password){
        System.out.println("username = " + username);
        System.out.println("password = " + password);
        modelAndView.addObject("date",new Date());
        modelAndView.setViewName("a");
        return modelAndView;
    }
}
